<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <!-- 1 什么是TypeScript
        typeScript 是 JavaScript的一个超集，支持ES6标准 ，ts 扩展了js 语法
        由微软团队开发，常用于大型项目中，编译后输出为js文件
        以js为基础 可以在任何支持js的平台上执行（ts不能被js解析器直接执行）
        ts扩展了js,并添加了类型   ts是js的一个超集
        ts完全兼容js
        js严格模式


        2、ts 比 js 新增了一些特性
            类型批注和编译时类型检查
            类型推断
            类型擦除
            接口
            枚举
            Mixin
            泛型编程
            命名空间
            元组
            Await
            类
            模块
            lambda 函数的箭头语法
            可选参数以及默认参数


        3、ts 和 js 的区别

        4、ts 环境安装
        安装nodejs
        npm install -g typescript
        tsc -v 检查安装是否成功

        5、创建第一个ts文件
        创建2、第一个ts文件
        node 2、第一个ts文件.ts   ====》 报错
        node 2、第一个不带ts语法的ts文件.ts   ==>正常输出
        运行带ts语法的ts文件 需要tsc命令将ts转为js文件
        ts可以编译成任意版本的js代码，默认js版本3 ，let const 都会默认编译为var ,可以在编译器配置编译之后的版本


        6、体验ts 的基础语法
        创建3、基本语法.ts 
        tsc 3、基本语法.ts --removeComments 编译为的 js 文件会删除ts中的注释
        tsc 3、基本语法.ts --sourcemap    编译生成一个 sourcemap (.map) 文件。sourcemap 是一个存储源代码与编译代码对应位置映射的信息文件。

        7、ts 是一种面向对象的编程语言，有对象和类的概念
        对比生成的js 文件中和ts 编译前的代码


        8、ts 基本数据类型
        创建4、基本类型.ts
        (1)任意类型 
                any 可以赋予任何类型的值，不建议使用 any 类型 ,any类型可以赋值给任何类型变量
                        let x:any = 123
                unknown 可以赋值任意类型的变量，实际上就是一个类型安全的any,但是不能 unknown 直接赋值给别的变量,如果非要赋值，可以进行类型检查

                补充：对象类型、函数类型 & | 与或判断  类型别名
        (2)数字类型 number  
                let x: number = 123
                let x: number = 0b1010 表示二进制
        (3)字符串类型  string
                let str: string = "hello"
                let msg: string = "${str},world"
        (4)布尔类型   boolean
                let falg: boolean = true
        (5)数组类型   无 
                // 在元素类型后面加上[]
                let arr: number[] = [1, 2];
                // 或者使用数组泛型
                let arr: Array<number> = [1, 2];
        (6)元组 taple    无   元组类型用来表示未知元素数量和类型的数组，各元素的类型不必相同，对应位置的类型需要相同。
                let x: [string, number];
                x = ['Runoob', 1];    // 运行正常
                x = [1, 'Runoob'];    // 报错
                console.log(x[0]);    // 输出 Runoob
        (7)枚举    enum   用于定义数值集合
                enum Color {Red, Green, Blue};
                let c: Color = Color.Blue;
                console.log(c);    // 输出 2
        (8)void   void   用于标识方法返回值的类型，表示该方法没有返回值。
                function hello(): void {
                    alert("Hello Runoob");
                }
        (9)null    null
        (10)undefined undefined
        (11)never   never   其它类型（包括 null 和 undefined）的子类型，代表从不会出现的值。

        


        9、变量声明和类型断言
        创建5、类型断言.ts  
        类型断言可以用来手动指定一个值的类型，即允许变量从一种类型更改为另一种类型。
        语法格式：<类型>值      或:     值 as 类型
        变量作用域：类作用域 全局作用域 局部作用域
        运算符：和js相同  其中按位运算（& | ~ ^ << >> >>>）7种 
        条件语句 循环语句 函数（函数重载：方法名相同，参数不同[类型、数量、顺序]，返回值类型可以相同也可以不同）
        Number对象 String对象 Array对象 Map对象（for of迭代） 元组 联合类型(见6、联合类型.ts)


        10、接口
        创建7、接口.ts


        11、类  --- 字段 构造函数 方法
        创建8、类.ts
        类  实例化  属性方法  类的继承  继承类的方法重写 static关键字 instanceof  访问控制修饰符 类和接口
        抽象类 abstract  专门用来继承的类，不能被实例化   抽象类可以添加抽象方法，抽象方法必须由子类实现

        12、对象、和js相同


        13、命名空间
        创建9、namespace.ts
        命名空间的创建 使用
        tsc --out namespace.js 9、namespaceUse.ts


        14、编译选项
        -w 表示监视当前ts文件，编译出js文件,热更新ts  例如：tsc 4、基本类型.ts -w
        如果需要对所有文件进行监听,需要创建 tsconfig.json   执行 tsc -w 就能监听所有文件变化



        15、如何用webpack对ts进行打包，创建webpackTest文件夹
        并在生成文件夹终端中执行 cnpm i -D webpack webpack-cli typescript ts-loader
     -->
</body>
</html>